/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.edu.espe.distribuidas.courier.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 *
 * @author cHr15t14n
 */
@Entity
@Table(name = "paquete")

public class Paquete implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "ID_PAQUETE", nullable = false)
    private Integer idPaquete;

    @Column(name = "FECHA_ENVIO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaEnvio;

    @Column(name = "FECHA_RECEPCION")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaRecepcion;

    @Column(name = "PESO", nullable = true)
    private BigDecimal peso;

    @Column(name = "LARGO", nullable = true)
    private BigDecimal largo;

    @Column(name = "ANCHO", nullable = true)
    private BigDecimal ancho;

    @Column(name = "PROFUNDIDAD", nullable = true)
    private BigDecimal profundidad;

    @Column(name = "PESO_COBRO", nullable = true)
    private BigDecimal pesoCobro;

    @Column(name = "NOMBRE_REMITENTE", nullable = false, length = 100)
    private String nombreRemitente;

    @Column(name = "DIRECCION_REMITENTE", length = 100, nullable = true)
    private String direccionRemitente;

    @Column(name = "TELEFONO_REMITENTE", length = 15, nullable = true)
    private String telefonoRemitente;

    @Column(name = "NOMBRE_DESTINATARIO", nullable = false, length = 100)
    private String nombreDestinatario;

    @Column(name = "DIRECCION_DESTINATARIO", length = 100, nullable = true)
    private String direccionDestinatario;

    @Column(name = "TELEFONO_DESTINATARIO", length = 15)
    private String telefonoDestinatario;

    @Column(name = "ESTADO_PAGADO_PAQUETE", nullable = false, length = 20)
    private String estadoPagadoPaquete;

    @JoinColumn(name = "ID_GUIA", referencedColumnName = "ID_GUIA")
    @ManyToOne
    private GuiaMadre guiaMadre;

    @OneToMany(mappedBy = "paquete")
    private List<Servicio> servicio;

    @OneToMany(mappedBy = "paquete")
    private List<CostoPaquete> costoPaquete;

    @OneToMany(mappedBy = "paquete")
    private List<Pagos> pago;

    @OneToMany(mappedBy = "paquete")
    private List<Multa> multa;

    @OneToMany(mappedBy = "paquete")
    private List<SeguimientoPaquete> seguimientoPaquete;

    @JoinColumn(name = "ID_CATEGORIA", referencedColumnName = "ID_CATEGORIA")
    @ManyToOne
    private CategoriaAduanera categoriaAduanera;

    @JoinColumn(name = "ID_CLIENTE", referencedColumnName = "ID_CLIENTE")
    @ManyToOne
    private Cliente cliente;

    public Paquete() {
    }

    public Paquete(Integer idPaquete) {
        this.idPaquete = idPaquete;
    }

    public Paquete(Integer idPaquete, int idGuia, int idCategoria, int idCliente, String nombreRemitente, String nombreDestinatario, String estadoPagadoPaquete) {
        this.idPaquete = idPaquete;

        this.nombreRemitente = nombreRemitente;
        this.nombreDestinatario = nombreDestinatario;
        this.estadoPagadoPaquete = estadoPagadoPaquete;
    }

    public Integer getIdPaquete() {
        return idPaquete;
    }

    public void setIdPaquete(Integer idPaquete) {
        this.idPaquete = idPaquete;
    }

    public GuiaMadre getGuiaMadre() {
        return guiaMadre;
    }

    public void setGuiaMadre(GuiaMadre guiaMadre) {
        this.guiaMadre = guiaMadre;
    }

    public List<Servicio> getServicio() {
        return servicio;
    }

    public void setServicio(List<Servicio> servicio) {
        this.servicio = servicio;
    }

    public List<CostoPaquete> getCostoPaquete() {
        return costoPaquete;
    }

    public void setCostoPaquete(List<CostoPaquete> costoPaquete) {
        this.costoPaquete = costoPaquete;
    }

    public List<Pagos> getPago() {
        return pago;
    }

    public void setPago(List<Pagos> pago) {
        this.pago = pago;
    }

    public List<Multa> getMulta() {
        return multa;
    }

    public void setMulta(List<Multa> multa) {
        this.multa = multa;
    }

    public List<SeguimientoPaquete> getSeguimientoPaquete() {
        return seguimientoPaquete;
    }

    public void setSeguimientoPaquete(List<SeguimientoPaquete> seguimientoPaquete) {
        this.seguimientoPaquete = seguimientoPaquete;
    }

    public CategoriaAduanera getCategoriaAduanera() {
        return categoriaAduanera;
    }

    public void setCategoriaAduanera(CategoriaAduanera categoriaAduanera) {
        this.categoriaAduanera = categoriaAduanera;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Date getFechaEnvio() {
        return fechaEnvio;
    }

    public void setFechaEnvio(Date fechaEnvio) {
        this.fechaEnvio = fechaEnvio;
    }

    public Date getFechaRecepcion() {
        return fechaRecepcion;
    }

    public void setFechaRecepcion(Date fechaRecepcion) {
        this.fechaRecepcion = fechaRecepcion;
    }

    public BigDecimal getPeso() {
        return peso;
    }

    public void setPeso(BigDecimal peso) {
        this.peso = peso;
    }

    public BigDecimal getLargo() {
        return largo;
    }

    public void setLargo(BigDecimal largo) {
        this.largo = largo;
    }

    public BigDecimal getAncho() {
        return ancho;
    }

    public void setAncho(BigDecimal ancho) {
        this.ancho = ancho;
    }

    public BigDecimal getProfundidad() {
        return profundidad;
    }

    public void setProfundidad(BigDecimal profundidad) {
        this.profundidad = profundidad;
    }

    public BigDecimal getPesoCobro() {
        return pesoCobro;
    }

    public void setPesoCobro(BigDecimal pesoCobro) {
        this.pesoCobro = pesoCobro;
    }

    public String getNombreRemitente() {
        return nombreRemitente;
    }

    public void setNombreRemitente(String nombreRemitente) {
        this.nombreRemitente = nombreRemitente;
    }

    public String getDireccionRemitente() {
        return direccionRemitente;
    }

    public void setDireccionRemitente(String direccionRemitente) {
        this.direccionRemitente = direccionRemitente;
    }

    public String getTelefonoRemitente() {
        return telefonoRemitente;
    }

    public void setTelefonoRemitente(String telefonoRemitente) {
        this.telefonoRemitente = telefonoRemitente;
    }

    public String getNombreDestinatario() {
        return nombreDestinatario;
    }

    public void setNombreDestinatario(String nombreDestinatario) {
        this.nombreDestinatario = nombreDestinatario;
    }

    public String getDireccionDestinatario() {
        return direccionDestinatario;
    }

    public void setDireccionDestinatario(String direccionDestinatario) {
        this.direccionDestinatario = direccionDestinatario;
    }

    public String getTelefonoDestinatario() {
        return telefonoDestinatario;
    }

    public void setTelefonoDestinatario(String telefonoDestinatario) {
        this.telefonoDestinatario = telefonoDestinatario;
    }

    public String getEstadoPagadoPaquete() {
        return estadoPagadoPaquete;
    }

    public void setEstadoPagadoPaquete(String estadoPagadoPaquete) {
        this.estadoPagadoPaquete = estadoPagadoPaquete;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idPaquete != null ? idPaquete.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Paquete)) {
            return false;
        }
        Paquete other = (Paquete) object;
        if ((this.idPaquete == null && other.idPaquete != null) || (this.idPaquete != null && !this.idPaquete.equals(other.idPaquete))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "ec.edu.espe.distribuidas.courier.modelo.Paquete[ idPaquete=" + idPaquete + " ]";
    }

}
